#pragma once

struct Vec3D
{
	float x, y, z;
	Vec3D(): x(0), y(0), z(0) {}
	Vec3D(float x, float y, float z): x(x), y(y), z(z) {}
	void operator=(int assign)
	{
		this->x = (float)assign;
		this->y = (float)assign;
		this->z = (float)assign;
	}
};

struct Rotation
{
	int yaw;			// rotation in degrees around the y-axis
	int pitch;			// rotation in degrees around the x-axis
	int roll;			// rotation in degrees around the z-axis

	Rotation() : yaw(0), pitch(0), roll(0) {}
	Rotation(int y, int x, int z) : yaw(y), pitch(x), roll(z) {}
};

struct Dimensions
{
	int width, height;

	Dimensions() { width = 800; height = 600; }				// set window size to 800x600 by default
	Dimensions(int w, int h) { width = w; height = h; }
};

struct Direction
{
	bool up, down, left, right;
	Direction() {up = down = left = right = false; }
};

enum eRotateDirection
{
	LEFT,
	RIGHT
};

enum eMainGameState
{
	INTRO,
	LOADING,
	MENU,
	GAME,
	QUIT
};

enum ePlayerType
{
	PLAYER1,
	PLAYER2,
	COMPUTER,
	NOPLAYER
};

enum eDrawableType
{
	// PIECE SECTION
	MON,		// the piece with just one block
	DOM,		// the piece with just two blocks

	TRI0,		// first type of triomino
	TRI1,		// second type of trimino

	TETR0,		// first type of tetramino (four block piece)
	TETR1,		// etc
	TETR2,
	TETR3,
	TETR4,

	PENT0,		// first type of pentamino (five block piece)
	PENT1,		// etc
	PENT2,
	PENT3,
	PENT4,
	PENT5,
	PENT6,
	PENT7,
	PENT8,
	PENT9,
	PENT10,
	PENT11,

	// END PIECE SECTION
	// BEGIN VARIOUS GAME RELATED OBJECTS
	BOARD,
	CAMERA,
	// END GAME RELATED OBJECTS

	// BEGIN MENU RELATED OBJECTS
	TEXTBOX,
	BUTTON,
	// END MENU RELATED OBJECTS

	NOTYPE
};

// used for sound
enum eSounds
{
	SELECT,
	SELETION,
	PLACE,
	MOVE,
	BADPLACE
};